将List数据快速转换为Tree 树结构

看了现在很多网友写的,发现他们写的代码逻辑都会对数据进行多次循环,这样性能我个人认为不是很好,所以我这边贴出我的代码,这边只用到一次循环,供大家参考,和一起学习,希望大家一起提出更好的想法。

/**
树结构实体 大部分基本上都是这样 需要的自行改造
*/
public class Node {
        public Node(String id, String pId, String string) {
            this.id = id;
            pid = pId;
            name = string;
            this.children = new ArrayList<Node>();

        }
        /**
         * id
         */
        private String id;
        /**
         * 父节点id
         */
        private String pid;
        /**
         * 名称
         */
        private String name;
        /**
         * 子节点
         */
        private List<Node> children;
}

下面我们来展示真正转换的逻辑代码代码

public List<Node> buildTree(List<Node> nodes){
        Map<String, Node> nodeMap = new HashMap<String, BuildTree.Node>();
        List<Node> roots = new ArrayList<Node>();
        for (Node node : nodes) {
            String id = node.getId();
            Node n = nodeMap.get(id);
            if(n == null){
                n = node;
                nodeMap.put(id, node);
            }else {
                String pid = n.getPid();
                if(pid.equals("-1")){//代表是我们预先存的节点 替换真实数据
                    copyProps(n,node);//复制数据逻辑
                }
            }
            String pid = node.getPid();
            Node pn = nodeMap.get(pid);
            if(pn == null){//父节点不存在 先设置假数据 存在
                pn = new Node(pid, "-1", "");
                if(pid.equals("0")){
                    roots.add(pn);
                }
                nodeMap.put(pid, pn);
            }
            pn.children.add(n);
        }
       return roots.get(0).getChildren();//返回真正顶级节点
    }

原创文章,作者:ikme,如若转载,请注明出处:https://ikme.cn/Java/2.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
下一篇 2024-4-19 10:14
版权所有:ikme
文章标题:将List数据快速转换为Tree 树结构
除非注明,文章均为 ikme 原创,转载请注明作者和出处 ikme
收藏

扫描二维码,在手机上阅读

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

验证码